package com.grupobbva.seguridad.web.servlet.action;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import com.grupobbva.seguridad.domain.Aplicacion;
import com.grupobbva.seguridad.domain.TablaDetalle;
import com.grupobbva.seguridad.domain.Restriccion;
import com.grupobbva.seguridad.service.AdministracionService;
import com.grupobbva.seguridad.service.SeguridadService;
import com.grupobbva.seguridad.util.Constante;
import com.grupobbva.seguridad.util.ResultadoOperacion;
import com.grupobbva.seguridad.util.ResultadoOperacionExito;
import com.grupobbva.seguridad.util.Util;

@Controller
public class MantenimientoRestriccionController extends BaseController {
	
	@Autowired
	private SeguridadService seguridadService;

	@Autowired
	private AdministracionService administracionService;

	private List<TablaDetalle> obtenerAmbitos() throws Exception {
		List<TablaDetalle> lista = new ArrayList<TablaDetalle>();
		lista = administracionService.obtenerDetalles(Constante.TG_AMBITOS_PERFIL);
		for (int i = lista.size()-1; i >= 0; i--) {
			if (lista.get(i).getDetalleId().longValue() == Constante.TD_PERFIL_GENERAL) {
				lista.remove(i);
				break;
			}
		}
		return lista;
	}
	
	@RequestMapping("/resmnt.do")
    public String mostrar(HttpServletRequest request) throws Exception {
		request.setAttribute("aplicaciones", seguridadService.obtenerAplicaciones(new Aplicacion(), getAccesoAplicacionIds(request)));
		request.setAttribute("estados", administracionService.obtenerDetalles(Constante.TG_ESTADOS_REGISTRO));
		request.setAttribute("ambitos", obtenerAmbitos());
    	return getRelativeURL("resmnt");
    }
	
	@RequestMapping("/reslst.do")
    public String listar(HttpServletRequest request) throws Exception {
		Restriccion usuarioRestriccion = new Restriccion();
		//usuarioRestriccion.setId(new UsuarioRestriccionPK(getParameterLong(request, "filtroAplicacionId"), getParameterLong(request, "filtroRestriccionId")));
		usuarioRestriccion.setAplicacion(new Aplicacion(getParameterLong(request, "filtroAplicacionId")));
		usuarioRestriccion.setCodigoId(getParameterString(request, "filtroCodigoId"));
		usuarioRestriccion.setAmbito(new TablaDetalle(getParameterLong(request, "filtroAmbitoId")));
		usuarioRestriccion.setEstado(new TablaDetalle(getParameterLong(request, "filtroEstadoId")));
		
		request.setAttribute("restricciones", seguridadService.obtenerRestricciones(usuarioRestriccion));
		
    	return getRelativeURL("reslst");
    }
	
	@RequestMapping("/resupd.do")
    public String modificar(HttpServletRequest request) throws Exception {
		Restriccion usuarioRestriccion = null;
		if(getParameterLong(request, "restriccionId") == null) {
			usuarioRestriccion = new Restriccion();
			usuarioRestriccion.setAplicacion(new Aplicacion());
			usuarioRestriccion.setAmbito(new TablaDetalle());
			usuarioRestriccion.setEstado(new TablaDetalle());
		} else {
			usuarioRestriccion = seguridadService.obtenerRestriccion(getParameterLong(request, "restriccionId"));
		}
		request.setAttribute("restriccion", usuarioRestriccion);
		request.setAttribute("aplicaciones", seguridadService.obtenerAplicaciones(new Aplicacion(), getAccesoAplicacionIds(request)));
		request.setAttribute("ambitos", obtenerAmbitos());
		request.setAttribute("estados", administracionService.obtenerDetalles(Constante.TG_ESTADOS_REGISTRO));
    	return getRelativeURL("resreg");
    }
	
	@RequestMapping("/resdel.do")
    public String eliminar(HttpServletRequest request) throws Exception {
    	ResultadoOperacion resultado = null;
		try {
			String codigoMensaje  = "restriccion.eliminar.exito";
						
			seguridadService.eliminarRestriccion(new Restriccion(getParameterLong(request, "restriccionId")), getUsuario(request));
			
			resultado = new ResultadoOperacionExito(Util.getMessage(codigoMensaje));
		} catch (Exception e) {
			resultado = guardarMensajeError(request, e);
		}
    	return getRelativeAjaxURL(request, resultado);
    }
	
	@RequestMapping("/resreg.do")
    public String grabar(@ModelAttribute("restriccion") Restriccion restriccion, HttpServletRequest request) throws Exception {
        ResultadoOperacion resultado = null;
		try {
			String codigoMensaje  = "restriccion."+((restriccion.getRestriccionId()==null)?"registrar":"modificar")+".exito";
						
			seguridadService.registrarRestriccion(restriccion, getUsuario(request));
			
			resultado = new ResultadoOperacionExito(Util.getMessage(codigoMensaje));
		} catch (Exception e) {
			resultado = guardarMensajeError(request, e);
		}
    	return getRelativeAjaxURL(request, resultado);
    }
}
